﻿using System;
using System.Collections.ObjectModel;
using CI.Interfaces;
using CI.Organism;

namespace CI
{
    /// <summary>
    /// Physical Cell type which can be body or I/O etc, usally this class is implmented in the Hosting Environment
    /// This could be a iRobot, Amoeba, Pioneer 3DX
    /// </summary>
    public interface IPhysical : ICell
    {
        /// <summary>IO manifest, used by neural network when mutating</summary>
        ReadOnlyCollection<SynapseIO> IOManifest { get; }

        /// <summary>
        /// Get the synapseIO with the corresponding binding name
        /// </summary>
        /// <param name="bindingName"></param>
        /// <returns></returns>
        SynapseIO GetSynapseIO(string bindingName);

        /// <summary>
        /// Get the synapseIO with the corresponding Guid
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        SynapseIO GetSynapseIO(Guid guid);
    }
}